<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script src="//cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script>
    <script src="md5.min.js"></script>
</head>
<body>
<script>

    $(function () {
        var DataMap = {
            userNormal: {
                id: 'normal1244579',
                name: '酷倍达',
                class: 'B',
                nickname: '酷倍达',
                password: '123456',
                role: 1,
                email: 'inahoo.m@qq.com'
            },
            userAdmin: {
                id: 'admin',
                name: 'admin',
                class: '管理员要什么班级?',
                nickname: 'admin',
                password: 'admin',
                role: 9999,
                email: 'inahoo.m@qq.com'
            }
        };

        function Check(map) {
            this.send = map.send;
            this.check = map.check;
            this.msg = map.msg;
        }

        function CheckList(map) {
            this.list = map.list || [];
            this.name = map.name || '';
            this.data = map.data || {};
            var p = new Promise(function (re) {
                re()
            });
            this.go = function () {
                console.log('\n=======================\n' + this.name + '\n=======================\n');

                this.list.forEach(function (v) {
                    p = p.then(function () {
                        return new Promise(function (resolve) {
                            var check = v.check;
                            if (typeof v.send.data == 'function') {
                                v.send.data = v.send.data();
                            }
                            var msg = v.msg;
                            $.ajax($.extend(v.send, {
                                success: function (obj) {
                                    if (check(obj)) {
                                        console.log(msg + ' - 成功');
                                    }
                                    else {
                                        Error(msg + ' - 失败');
                                    }
                                    resolve();
                                }
                            }));
                        })
                    });
                });

                return this;
            }
        }

        var Error = function (msg) {
            console.log('%c' + msg, 'color: #ff0000');
        };

//        //随便试试
//        new CheckList({
//            name: '列表拉取测试',
//            list: [
//                new Check({
//                    msg: 'website - 普通用户登录',
//                    send: {
//                        url: '/api/user/login',
//                        method: 'POST',
//                        data: {
//                            sid: md5(DataMap.userNormal.id),
//                            password: md5(DataMap.userNormal.password)
//                        }
//                    },
//                    check: function (obj) {
//                        return obj && obj.user && JSON.stringify(obj.user) != '{}';
//                    }
//                }),
//                new Check({
//                    msg: 'website - 获取课件列表',
//                    send: {
//                        url: '/api/course/list',
//                        method: 'GET'
//                    },
//                    check: function (obj) {
//                        var list = obj.list;
//                        if (list.length > 0) {
//                            if (list.some(function (v) {
//                                        return v.class.match('B') == null;
//                                    })) {
//                                Error('存在不应当给B班看的课件');
//                                return false;
//                            }
//                            return true;
//                        } else {
//                            Error('没有数据');
//                            return false;
//                        }
//                    }
//                }),
//                new Check({
//                    msg: 'admin - 普通用户登录',
//                    send: {
//                        url: '/api/admin/user/login',
//                        method: 'POST',
//                        data: {
//                            sid: md5(DataMap.userNormal.id),
//                            password: md5(DataMap.userNormal.password)
//                        }
//                    },
//                    check: function (obj) {
//                        var data = {"code": 9999, "msg": "权限不够"};
//                        return JSON.stringify(obj) == JSON.stringify(data);
//                    }
//                }),
//                new Check({
//                    msg: 'admin - 管理员登录',
//                    send: {
//                        url: '/api/admin/user/login',
//                        method: 'POST',
//                        data: {
//                            sid: md5(DataMap.userAdmin.id),
//                            password: md5(DataMap.userAdmin.password)
//                        }
//                    },
//                    check: function (obj) {
//                        return obj && obj.user && JSON.stringify(obj.user) != '{}';
//                    }
//                }),
//                new Check({
//                    msg: 'admin - 获取正常学生列表',
//                    send: {
//                        url: '/api/admin/user/list',
//                        method: 'GET'
//                    },
//                    check: function (obj) {
//                        var list = obj.list;
//                        if (list.length > 0) {
//                            if (list.some(function (v) {
//                                        return v.role < 1;
//                                    })) {
//                                Error('存在不处于正常状态的用户');
//                                return false;
//                            }
//                            return true;
//                        } else {
//                            Error('没有数据');
//                            return false;
//                        }
//                    }
//                })
//
//            ]
//        }).go();

        //注册流程测试
        (function () {
            var newUser = {
                _id: '',
                id: '222222',
                secId: '',
                class: 'B',
                name: '测试脚本_未通过',
                nickname: '测试脚本_未通过',
                password: '123456',
                secPassword: '',
                role: -2,
                email: 'inahoo.m@qq.com'
            };
            var RegisterProcess = new CheckList({
                name: '注册流程测试',
                list: [
                    new Check({
                        msg: 'website - 用户注册',
                        send: {
                            url: '/api/user/regist',
                            method: 'POST',
                            data: {
                                id: newUser.id,
                                name: newUser.name,
                                class: newUser.class,
                                email: newUser.email
                            }
                        },
                        check: function (obj) {
                            newUser.secId = md5(newUser.id);
                            return obj && obj.code == 0;
                        }
                    }),
                    new Check({
                        msg: 'admin - 管理员登录',
                        send: {
                            url: '/api/admin/user/login',
                            method: 'POST',
                            data: {
                                sid: md5(DataMap.userAdmin.id),
                                password: md5(DataMap.userAdmin.password)
                            }
                        },
                        check: function (obj) {
                            return obj && obj.user && JSON.stringify(obj.user) != '{}';
                        }
                    }),
                    new Check({
                        msg: 'admin - 获取未审核学生列表',
                        send: {
                            url: '/api/admin/user/verify/list',
                            method: 'GET'
                        },
                        check: function (obj) {
                            var list = obj.list;
                            if (list.length > 0) {
                                if (!list.some(function (v) {
                                            if (v.id == newUser.id) {
                                                newUser._id = v._id;
                                                return true;
                                            }
                                        })) {
                                    Error('没有找到刚才的用户');
                                    return false;
                                } else {
                                    return true;
                                }
                            } else {
                                Error('没有数据');
                                return false;
                            }
                        }
                    }),
                    new Check({
                        msg: 'admin - 审核该学生',
                        send: {
                            url: '/api/admin/user/verify',
                            method: 'POST',
                            data: function () {
                                return {
                                    json: JSON.stringify({
                                        list: [newUser.id],
                                        pass: true
                                    })
                                }
                            }
                        },
                        check: function (obj) {

                            if (obj.code == 0) {
                                return true;
                            } else {
                                Error(obj.msg);
                                return false;
                            }
                        }
                    }),
                    new Check({
                        msg: 'website - 获取该学生的信息',
                        send: {
                            url: '/api/user/verify',
                            method: 'GET',
                            data: function () {
                                return {
                                    _id: newUser._id
                                }
                            }
                        },
                        check: function (obj) {

                            if (obj.code == 0) {
                                if (obj.user.secId == newUser.secId) {
                                    return true;
                                } else {
                                    Error('secId不符');
                                    return false;
                                }
                            } else {
                                Error(obj.msg);
                                return false;
                            }
                        }
                    }),
                    new Check({
                        msg: 'website - 补充学生信息',
                        send: {
                            url: '/api/user/verify',
                            method: 'POST',
                            data: function () {
                                return {
                                    secId: newUser.secId,
                                    nickname: newUser.nickname,
                                    password: newUser.password
                                }
                            }
                        },
                        check: function (obj) {
                            newUser.secPassword = md5(newUser.password);
                            if (obj.code == 0 && obj.user) {
                                return true;
                            } else {
                                Error(obj.msg);
                                return false;
                            }
                        }
                    }),
                    new Check({
                        msg: 'website - 新用户尝试登录',
                        send: {
                            url: '/api/user/login',
                            method: 'POST',
                            data: function () {
                                return {
                                    sid: newUser.secId,
                                    password: newUser.secPassword
                                }
                            }
                        },
                        check: function (obj) {

                            if (obj.code == 0 && obj.user) {
                                return true;
                            } else {
                                Error(obj.msg);
                                return false;
                            }
                        }
                    })
                ]
            }).go();
        })();

    });


</script>
</body>
</html>